# -*- coding:utf-8 -*-

# ======= import =======


import idautils
import idaapi

# 打开输出文件
output_file_path = "d:/comments_output.txt"
with open(output_file_path, "w") as f:
    # 遍历所有函数
    for func_ea in idautils.Functions():
        func = idaapi.get_func(func_ea)
        if not func:
            continue

        # 遍历函数内的所有指令
        for head in idautils.Heads(func.start_ea, func.end_ea):
            # 获取指令的注释
            comment = idaapi.get_cmt(head,0)
            if comment:
                # 写入注释和地址到文件中
                f.write("Address: 0x{:X}, Comment: {}\n".format(head, comment))

print("Comments output to:", output_file_path)


# 最终因无法获取 IDA中 伪代码中的注释，这个脚本就取消了
# IDA中的注释 分为 在汇编中的和伪代码中的。其中汇编中的分为循环的和不循环的，汇编的这种可以通过get_cmt获取。意义不大。还会把很多变量类型、变量名给导出。没用数据太多。